МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
Кафедра ПЗ
ЗВІТ
ДО ЛАБОРАТОРНОЇ РОБОТИ № 5
На тему: «Робота з WinAPI функціями та доступ до системних ресурсів»
З дисципліни : «Методи та засоби КІТ»
Тема роботи: Робота з WinAPI функціями та доступ до системних ресурсів.
Мета роботи: Навчитись працювати з WinAPI функціями та системними ресурсами.
ХІД РОБОТИ:
ЗАВДАННЯ:
Робота з реєстром, зміна відповідних ключів, задання відповідних параметрів.
ТЕКСТ ПРОГРАМИ:
Unit1:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus, Buttons, Registry, Unit2, XPMan;
type
TForm1 = class(TForm)
lbKeys: TListBox;
lvPair: TListView;
PopupMenu1: TPopupMenu;
pmChange: TMenuItem;
pmDel: TMenuItem;
N1: TMenuItem;
cbRoot: TComboBox;
SBar1: TStatusBar;
pmCreate: TMenuItem;
PopupMenu2: TPopupMenu;
pmCreateKey: TMenuItem;
XPManifest1: TXPManifest;
procedure FormCreate(Sender: TObject);
procedure ShowSubKey(_hkey: HKEY);
procedure lbKeysClick(Sender: TObject);
procedure lbKeysDblClick(Sender: TObject);
procedure cbRootChange(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
procedure pmCreateKeyClick(Sender: TObject);
procedure pmCreateClick(Sender: TObject);
procedure pmChangeClick(Sender: TObject);
procedure pmDelClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Const RootW: array[0..5]of HKEY=( HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CLASSES_ROOT, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIG, HKEY_DYN_DATA);
implementation
{$R *.dfm}
var
path: array[0..300] of string;
fullp: string;
ip: integer;
root: HKEY;
Vals: TStringList;
_Stop: boolean = false;
NeedVal: integer;
Data : string;
NeedName: string;
cc: integer;
vname : pchar;
sname: string;
_type: cardinal;
dat: array[0..4096] of char;
sbuf: string;
procedure TForm1.FormCreate(Sender: TObject);
begin
root:=HKEY_LOCAL_MACHINE;
ShowSubKey(root);
end;
procedure TForm1.cbRootChange(Sender: TObject);
begin
root:=RootW[cbRoot.ItemIndex];
ip:=0; fullp:=''; SBar1.SimpleText:='';
lbKeys.Clear;
lbKeysDblClick(self)
end;
procedure TForm1.ShowSubKey(_hkey: HKEY);
var
buf: ShortString; SubKNum, ValNum, lsname,lvname,lvdata: DWord;
ltime: dword; name: PChar; k: cardinal;
begin
RegQueryInfoKey(_hkey,@buf,@length(buf),nil,@SubKNum,@lsname,nil, @ValNum,@lvname,@lvdata,nil,@ltime);
lbKeys.Items.BeginUpdate;
lvPair.Clear; lbKeys.Clear;
if SubKNum<>0 then begin
GetMem(name,lsname+1);
for k:=0 to SubKnum-1 do begin
RegEnumKey(_hkey,k,name,lsname+1);
lbKeys.Items.Add(string(name));
end;
FreeMem(name);
end;
if ip>0 then
lbKeys.Items.Insert(0,'<...>');
lbKeys.Items.EndUpdate;
end;
procedure TForm1.lbKeysDblClick(Sender: TObject);
var
_hkey: HKEY; i: integer;
begin
i:=lbKeys.ItemIndex;
if i>=0 then
if lbKeys.Items.Strings[i]='<...>' then begin
dec(ip);
end
else begin
path[ip]:=lbKeys.Items.Strings[i];
inc(ip);
end;
fullp:='';
for i:=0 to ip-1 do fullp:=fullp+path[i]+'\';
Sbar1.Panels.Items[0].Text:=cbRoot.Text+'\'+fullp;
if RegOpenKeyEx(root,pchar(fullp),0,KEY_EXECUTE ,_hkey) =0 then
begin ShowSubKey(_hkey); end
else ShowMessage('Помилка');
RegCloseKey(_hkey);
end;
procedure TForm1.lbKeysClick(Sender: TObject);
var
buf: array[0..100] of char; SubKNum, ValNum: integer;
lsname,lvname,lvdata: dword; ltime: dword;
i, k, n: dword; vname: PChar;
st1: string; bufw: dword;
_type: integer; err: longint;
_path: string;
buf0: array[0..255] of char;
_hkey: HKEY;
begin
i:=lbKeys.ItemIndex;
lvPair.Items.Clear;
if (lbKeys.Items.Strings[i]<>'<...>') then
else exit;
if (fullp<>'') then _path:=fullp+lbKeys.Items.Strings[i]+'\'
else _path:=lbKeys.Item...